package cm.match.rule;

import cm.match.dto.RuleDto;
import cm.match.rule.expression.Expression;

public abstract class AbstractRule implements BaseRule, Expression {

    /**
     * 数据类型转换, 默认强转
     *
     * @param dto 公共对象
     * @param <T> 目标对象
     * @return 转换后的结果
     */
    protected <T> T convert(RuleDto dto) {
        return (T)dto;
    }

    @Override
    public boolean execute(RuleDto dto) {
        return executeRule(convert(dto));
    }

    /**
     * 执行规则
     *
     * @param t   被转换类型数据
     * @param <T> 参数类型
     * @return 返回结果
     */
    protected <T> boolean executeRule(T t) {
        return true;
    }
}
